/**
 * Alipay.com Inc. Copyright (c) 2004-2018 All Rights Reserved.
 */
package com.yeyks.service;

import com.yeyks.dal.domain.OrderInfo;
import com.yeyks.dal.domain.UserInfo;
import com.yeyks.dto.OrderDetailDTO;
import com.yeyks.dto.OrderInfoDTO;
import com.yeyks.model.PreOrderInfo;
import com.yeyks.model.PreOrderInfo;
import io.swagger.models.auth.In;

import java.util.List;
import java.util.Map;

/**
 * @author Beacon
 * @version $Id: OrderService.java, v 0.1 2018年08月27日 20:20 Beacon Exp $
 */
public interface OrderService {

    void insertPreOrder(PreOrderInfo preOrderInfo);

    boolean chargeSucceededOrder(String orderNo);

    PreOrderInfo getPreOrderInfo(String orderNo);

    void deleteInfo(String orderNo);

    String getTopOrderNo();

    Boolean payCallback(String orderNo, Boolean succeeded);

    Boolean refundCallback(String orderNo, Boolean succeeded, Object refundInfo);

    /**
     * 分页获取订单
     *
     * @param status
     * @param orderNo
     * @param orderDate
     * @param checkIn
     * @param checkOut
     * @param pageNum
     * @param pageSize
     * @param type
     * @return
     */
    Map<String, Object> selectOrderByPage(String status, String orderNo, String orderDate, String checkIn, String checkOut, Integer pageNum, Integer pageSize, Integer type, Integer id);

    /**
     * 查询各状态的订单数
     *
     * @param pageNum
     * @param pageSize
     * @param type     默认1全部，2已付款，3未支付，4已取消
     * @return
     */
    List<OrderInfoDTO> selectOrderList(Integer id, Integer pageNum, Integer pageSize, Integer type);

    /**
     * 通过订单号查询订单
     *
     * @param orderNo
     * @return
     */
    OrderInfo selectOrderByOrderNo(String orderNo);

    /**
     * 修改订单状态
     *
     * @param orderNo
     * @param status
     * @return
     */
    Integer updateOrderStatus(String orderNo, Integer status);
    /**
     * 修改订单删除状态
     *
     * @param orderNo
     * @param status
     * @return
     */
    Integer updateOrderDelStatus(String orderNo, Integer status);

    Integer insertReturnId(OrderInfo orderInfo);

    /**
     * 通过订单查询订单的退款金额
     *
     * @param orderInfo
     * @return
     */
    Integer getRefundAmount(OrderInfo orderInfo);

    Integer updateByPrimaryKey(OrderInfo orderInfo);

    /**
     * 用户确认订单
     *
     * @param userInfo
     * @param param
     * @param checkInDate
     * @param checkOutDate
     * @param count
     * @param remark
     * @param couponId
     * @param roomId
     * @param type
     * @return
     */
    Map<String, String> preOrder(UserInfo userInfo, OrderInfo param, Long checkInDate, Long checkOutDate, Integer count, String remark, Integer couponId, Integer roomId, String type, String ip);

    /**
     * 用户确认订单（修改券id后）
     *
     * @param userInfo
     * @param param
     * @param checkInDate
     * @param checkOutDate
     * @param count
     * @param remark
     * @param couponId
     * @param roomId
     * @param type
     * @return
     */
    Map<String,String> preOrderV2(UserInfo userInfo, OrderInfo param, Long checkInDate, Long checkOutDate, Integer count, String remark, Integer couponId, Integer roomId, String type, String ip);

    /**
     * 用户确认订单
     *
     * @param userInfo
     * @param param
     * @param checkInDate
     * @param checkOutDate
     * @param count
     * @param remark
     * @param couponId
     * @param roomId
     * @param type
     * @param openId
     * @return
     */
    Map<String,String> h5PreOrder(UserInfo userInfo, OrderInfo param, Long checkInDate, Long checkOutDate, Integer count, String remark, Integer couponId, Integer roomId, String type, String ip, String openId, Boolean flag);
//    Map<String, String> h5PreOrderV2(UserInfo userInfo, OrderInfo param, Long checkInDate, Long checkOutDate, Integer count, String remark, Integer couponId, Integer roomId, String type, String ip, String openId, Boolean flag);

    /**
     * 用户去支付
     *
     * @param userInfo
     * @param orderNo
     * @param type
     * @return
     */
    Map<String,String> goPay(UserInfo userInfo, String orderNo, String type, String ip);

    /**
     * 用户评分
     *
     * @param orderNo
     * @param score
     * @return
     */
    Integer updateScoreByOrderNo(String orderNo, Integer score);

    /**
     * 更新用户评分和状态
     *
     * @param orderNo
     * @param score
     * @param status
     * @return
     */
    Integer updateScoreAndStatusByOrderNo(String orderNo, Integer score, Integer status);

    /**
     * 通过订单号查询该订单对应的酒店id
     *
     * @param orderNo
     * @return
     */
    Integer getHotelIdByOrderNo(String orderNo);

    /**
     * h5用户去支付
     *
     * @param userInfo
     * @param orderNo
     * @param type
     * @param ip
     * @param openId
     * @param flag
     * @return
     */
    Map<String,String> h5GoPay(UserInfo userInfo, String orderNo, String type, String ip, String openId, Boolean flag);

    /**
     * 查询订单详情
     *
     * @param orderInfo
     * @return
     */
    OrderDetailDTO detail(OrderInfo orderInfo);

    /**
     * 通过订单信息获取订单对应手机号
     *
     * @param orderInfo
     * @return
     */
    String getPhoneByOrderInfo(OrderInfo orderInfo);

    /**
     * 通过订单信息获取订单对应用户名和手机号
     *
     * @param orderInfo
     * @return
     */
    Map<String, String> getNameAndPhoneByOrderInfo(OrderInfo orderInfo);

    /**
     * 通过订单信息获取券的满减值，假如没有使用券返回null
     *
     * @param orderInfo
     * @return
     */
    Integer getPrice(OrderInfo orderInfo);

    /**
     * 通过订单号查询改订单的状态，为未支付则修改为已取消
     *
     * @param orderNo
     * @return
     */
    Integer updateCancleOrder(String orderNo);

}